原始题目:剑指 Offer 27. 二叉树的镜像 (opens new window)
解题思路:
要求一棵树的镜像,其实就是将树的的左右子节点交换一下,类似于交换数组中两个位置的元素。
递归函数
终止条件:当 为 时,返回 ;
递推工作:
- 使用 变量保存 。
- 把 .left 指向 右节点 的递归结果 。
- 把 指向原先保存的 左子树 的递归结果 。
- 返回 root。
代码:
public TreeNode mirrorTree(TreeNode root) {
if(root == null) {
return null;
}
TreeNode tmp = root.left;
root.left = mirrorTree(root.right);
root.right = mirrorTree(tmp);
return root;
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
复杂度分析
时间复杂度 :其中 为树的节点数量,交换工作需要遍历所有节点。
空间复杂度:最差情况下,树退化成链表,递归栈的占用 大小。